A data storage system is an arrangement of hardware and software that typically includes one or more storage processors coupled to an array of non-volatile data storage devices, such as magnetic disk drives, electronic flash drives, and/or optical drives. The storage processors service host input/output (I/O) operations received from host machines. The received I/O operations specify storage objects (e.g. logical disks or “LUNs”) that are to be written to, read from, created, or deleted. The storage processors run software that manages incoming I/O operations and that performs various data processing tasks to organize and secure the host data received from the host machines and stored on the non-volatile data storage devices
In many cases, it is desired to transfer the contents of a source LUN hosted by a first data storage system to a target LUN to be created on a second data storage system. Data transfer from the first data storage system to the second data storage system may be conducted using data migration. During migration, a bulk copy is made of data of the source LUN to the target LUN. While the bulk copy is occurring, I/O requests for read and write operations are sent to the source LUN, the target LUN, or both, depending on the state of migration and on whether the I/O requests are reads or writes. At the conclusion of data migration, the entire contents of the source LUN have been copied to the target LUN, and subsequent I/O requests may be directed exclusively to the target LUN. The source LUN may be taken off line and retired.
In one conventional system, an administrator operates the second data storage system, discovers the first data storage system, and selects the source LUN on the first data storage system to be migrated to the second data storage system. An application running on the second data storage system creates the target LUN, assigning it the same size as the source LUN, and makes the still-empty target LUN accessible to hosts. A user of an application running on a host that accesses the source LUN is asked to shut down the application, after which the user searches for new LUNs, which include the target LUN. The user may then reconfigure the application to use the target LUN in place of the source LUN, after which the user restarts the application. At this point, write I/Os from the application are directed to both the source LUN and the target LUN, while a bulk copy is performed in the background to transfer the contents of the source LUN to the target LUN.